package com.sztz.utils;

import cn.hutool.core.img.ImgUtil;
import cn.hutool.extra.qrcode.QrCodeUtil;

import java.awt.*;
import java.awt.image.BufferedImage;
import java.math.BigDecimal;

/**
 * 图片处理工具类
 * @author yzy
 * @date 2023/2/9 18:17
 */
public class ImageUtils {
    /**
     * 计算图片的大小，返回单位为KB
     * @param imageBase64Str 图片base64数据
     * @return java.lang.Integer 图片大小
     * @author yzy
     * @date 2023/2/9 18:26
     */
    public static Integer imageSize(String imageBase64Str){
        //1.找到等号，把等号也去掉(=用来填充base64字符串长度用)
        int equalIndex = imageBase64Str.indexOf("=");
        if(imageBase64Str.indexOf("=")>0) {
            imageBase64Str = imageBase64Str.substring(0, equalIndex);
        }
        //2.原来的字符流大小，单位为字节
        int strLength = imageBase64Str.length();
        //3.计算后得到的文件流大小，单位为字节
        int size = strLength-(strLength/8)*2;
        return bytesToKb(size);
    }
    /**
     * byte(字节)根据长度转成kb(千字节)
     * @param bytes 文件流大小
     * @return Integer
     * @author yzy
     * @date 2023/2/9 18:26
     */
    public static Integer bytesToKb(long bytes) {
        BigDecimal filesize = new BigDecimal(bytes);
        BigDecimal kilobyte = new BigDecimal(1024);
        float returnValue = filesize.divide(kilobyte, 1, BigDecimal.ROUND_DOWN).floatValue();
        return (int)returnValue ;
    }
    /**
     * 根据图片的base64数据缩放图片
     * @param base64ImagStr 原图的base64字符串
     * @param imageType 图片类型
     * @return String
     * @author yzy
     * @date 2023/2/9 18:26
     */
    public static String scaleImage(String base64ImagStr,String imageType){
        BufferedImage bufferedImage = ImgUtil.toImage(base64ImagStr);
        // 这块也可以直接通过传入一个image对象，
        Image scaleImage = ImgUtil.scale(bufferedImage, 0.2f);
        String resultBase64Str = ImgUtil.toBase64(scaleImage, imageType);

        Integer imageSizeBase64 = imageSize(resultBase64Str);
        if(imageSizeBase64 > 40){
            scaleImage(resultBase64Str,imageType);
        }
        return resultBase64Str;
    }
}
